package com.icloud.cer.rest.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class EncryptUtils {
	private static final Logger log = LoggerFactory.getLogger(EncryptUtils.class);
	public static int byteArray2int(byte[] b){
	    byte[] a = new byte[4];
	    int i = a.length - 1,j = b.length - 1;
	    for (; i >= 0; i--,j--) {//从b的尾部(即int值的低位)开始copy数据
	        if(j >= 0)
	            a[i] = b[j];
	        else
	            a[i] = 0;//如果b.length不足4,则将高位补0
	  }
	    int v0 = (a[0] & 0xff) << 24;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位
	    int v1 = (a[1] & 0xff) << 16;
	    int v2 = (a[2] & 0xff) << 8;
	    int v3 = (a[3] & 0xff) ;
	    return v0 + v1 + v2 + v3;
	}
	
	/**
	 * 让出指定对象的锁，并且挂起当前线程。只有当.. 1. 有别的线程notify了对象，并且锁没有被其他线程占用。 2.
	 * 有别的线程interrupt了当前线程。 此方法才会返回。
	 */
	public static final void doWait(Object obj) {
		synchronized (obj) {
			try {
				obj.wait();
			} catch (InterruptedException e) {
				log.error("doWait error", e);
			}
		}
	}


	/**
	 * 调用对象的wait方法，并设置超时时间
	 * 
	 * @param obj
	 * @param timeout
	 */
	public static final void doWait(Object obj, long timeout) {
		synchronized (obj) {
			try {
				obj.wait(timeout);
			} catch (InterruptedException e) {
				log.error("doWait error", e);
			}
		}
	}

	/**
	 * 唤醒一个在等待obj锁的线程
	 */
	public static final void doNotify(Object obj) {
		synchronized (obj) {
			obj.notify();
		}
	}

	/**
	 * 唤醒所有在等待obj的锁的线程。
	 * 
	 * @param obj
	 */
	public static final void doNotifyAll(Object obj) {
		synchronized (obj) {
			obj.notifyAll();
		}
	}

	/**
	 * 当前线程等待若干毫秒
	 * 
	 * @param l
	 *            毫秒数
	 */
	public static final void doSleep(long l) {
		try {
			Thread.sleep(l);
		} catch (InterruptedException e) {
			log.error("doWait error", e);
		}
	}

}
